package com.syh.jn.scm.dto.supplier.logistics;

import lombok.Data;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * Created by soci.song on 2018/11/2.
 */
@Data
public class LogisticsBillSto implements Serializable {
  /**
   * 发货类型(1:物流发货,2:快递发货,3:其它发货)
   */
  @NotNull(message = "发货类型不能为空")
  private Short deliveryType;
  /**
   * 快递单号
   */
  private String courierNumber;
  /**
   * 订单ID
   */
  @NotNull(message = "订单ID不能为空")
  private Long orderId;
  /**
   * 订单类型
   */
  @NotNull(message = "订单ID不能为空")
  private Short orderType;
  /**
   * 订单编号
   */
  @NotNull(message = "订单编号不能为空")
  private String orderCode;
  /**
   * 发货仓库id
   */
  @NotNull(message = "发货仓库不能为空")
  private Long depotId;
  /**
   * 物流类型(1:陆运 2:空运 3:海运)
   */
  private Short logisticsType;
  /**
   * 客户类型
   */
  @NotNull(message = "客户类型不能为空")
  private Short customerType;
  /**
   * 客户id
   */
  @NotNull(message = "客户id不能为空")
  private Long customerId;
  /**
   * 物流公司id
   */
  private Long logisticsCompanyId;
  /**
   * 航班号
   */
  private String flightNumber;
  /**
   * 海航号
   */
  private String shippingNumber;
  /**
   * 货车车牌号
   */
  private String plateNumber;
  /**
   * 预计到达时间(物流)
   */
  private Long etaDateTimestamp;
  /**
   * 司机姓名
   */
  private String driverName;
  /**
   * 司机联系电话
   */
  private String driverContactPhone;
  /**
   * 发货备注(物流)
   */
  private String deliveryNotes;
  /**
   * 发货地区编码
   */
  private String deliveryDeliAreaCode;
  /**
   * 发货地址省 市 区
   */
  private String deliveryDeliArea;
  /**
   * 发货人详细地址
   */
  private String deliveryDeliAddress;
  /**
   * 运费承担方(0:买家承担  1:卖家承担)
   */
  @NotNull(message = "运费承担方不能为空")
  private Short freightTake;
  /**
   * 承担方式(0:预收买家 1：买家到付)
   */
  private Short freightType;
  /**
   * 运费金额
   */
  @NotNull(message = "运费金额不能为空")
  @DecimalMin(value = "0",message = "运费金额必须大于0")
  private BigDecimal totalFreight;
  /**
   * 收货人姓名
   */
  @NotNull(message = "收货人姓名不能为空")
  private String deliName;
  /**
   * 收货人联系电话
   */
  @NotNull(message = "收货人联系电话不能为空")
  private String deliTel;
  /**
   * 收货地区编码
   */
  private String deliAreaCode;
  /**
   * 收货地址省 市 区
   */
  @NotNull(message = "收货地址省 市 区不能为空")
  private String deliArea;
  /**
   * 收货人详细地址
   */
  @NotNull(message = "收货人详细地址不能为空")
  private String deliAddress;
  /**
   * 要求到货时间
   */
  private Long receiveTimestamp;
  /**
   * 发货时间
   */
  private Long deliveryTimestamp;
  /**
   * 归属服务商id
   */
  @NotNull(message = "归属服务商id不能为空")
  private Long businessEntityId;
  /**
   * 物流单项
   */
  private List<LogisticsBillItemSto> items;

  @Data
  public class LogisticsBillItemSto implements Serializable {
    /**
     * 对应订单ITEMId
     */
    @NotNull(message = "对应订单项id不能为空")
    private Long orderItemId;
    /**
     * 订单类型
     */
    @NotNull(message = "订单类型不能为空")
    private Short orderType;
    /**
     * 物流单ID
     */
    private Long logisticsBillId;
    /**
     * 商品id
     */
    @NotNull(message = "商品id不能为空")
    private Long goodsId;
    /**
     * 商品编码
     */
    private String goodsCode;
    /**
     * 商品名称
     */
    private String goodsName;
    /**
     * 商品数量
     */
    @NotNull(message = "商品数量不能为空")
    @DecimalMin(value = "0",message = "商品数量必须大于0")
    private BigDecimal quantity;
    /**
     * 单位
     */
    private String units;
  }
}
